package main

import "fmt"

// 切片的特点：切片本质上是个struct，本身不存数据，里面有个字段是指向底层数组的指针，
// 它指向了开始和结束的位置，当append（未扩容）时，指针会后移一位，指向新追加的这个地址
func main() {
	s1 := []int{1, 2}
	s1 = append(s1, 3)
	s2 := s1 // 浅拷贝，共用一个底层数组
	s1 = append(s1, 4)
	fmt.Println(s1) // [1 2 3 4]
	fmt.Println(s2) // [1 2 3] // 虽然共用一个底层数组，但指针指向的位置不一样
	s2 = append(s2, 5)
	fmt.Println(s1) // [1 2 3 5]
	fmt.Println(s2) // [1 2 3 5]
}
